package Generic;

/**
 * @author 王艺锡
 * @version 1.0
 */
//自定义接口泛型
    @SuppressWarnings({"all"})
public class CustomGeneric02 {
    public static void main(String[] args) {
        //1.接口中静态成员不可以使用泛型
        //2.泛型接口的类型，在继承或者实现接口的时候确定
        //3.没有指定的类型，默认为Object

    }
}

interface IUsb<U,R>{
        int n = 10;
        //接口中的成员都是静态性质的
        //U name;//err 静态成员不可以使用泛型

        //普通方法中，可以使用接口泛型
        R get(U u);

        void hi(R r);

        void Run(R r1,R r2,U u1,U u2);

        //在jdk8中，在接口中使用默认方法也是可以使用泛型，
        default R method(U u){
            return null;
        }
}
//继承接口时
interface IA extends IUsb<String,Integer>{

}

//因为IA在继承IUsb接口的时候，制定了泛型的类型，所以在实现IUsb接口的方法的时候，会使用String替换U，Integer替换R
class AA implements IA{
    @Override
    public Integer get(String s) {
        return null;
    }

    @Override
    public void hi(Integer integer) {

    }

    @Override
    public void Run(Integer r1, Integer r2, String u1, String u2) {

    }

    @Override
    public Integer method(String s) {
        return IA.super.method(s);
    }
}

//实现接口时
class BB implements IUsb<Integer,Double>{
    @Override
    public Double get(Integer integer) {
        return null;
    }

    @Override
    public void hi(Double aDouble) {

    }

    @Override
    public void Run(Double r1, Double r2, Integer u1, Integer u2) {

    }

    @Override
    public Double method(Integer integer) {
        return IUsb.super.method(integer);
    }
}

//如果不指定泛型的类型，则默认为Object
@SuppressWarnings({"all"})
class CC implements IUsb{
    @Override
    public Object get(Object o) {
        return null;
    }

    @Override
    public void hi(Object o) {

    }

    @Override
    public void Run(Object r1, Object r2, Object u1, Object u2) {

    }

    @Override
    public Object method(Object o) {
        return IUsb.super.method(o);
    }
}